package com.ssm.platform.pojo.vo;

import com.ssm.basis.service.dictionary.GenderEnum;
import com.ssm.basis.service.office.ExcelCell;
import com.ssm.basis.web.jackson.dictionary.BeanPropertyTranslate;
import com.ssm.basis.web.jackson.dictionary.Dict;
import com.ssm.basis.web.jackson.sensitive.Sensitive;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.math.BigDecimal;

import static com.ssm.basis.web.jackson.sensitive.SensitiveStrategy.ID_CARD;

@Getter
@Setter
@BeanPropertyTranslate
@Accessors(chain = true)
@Schema(description = "用户表")
public class UsersVo implements Serializable {
    private static final long serialVersionUID = 1L;

    @ExcelCell(title = "登录用户名")
    @Schema(description = "登录用户名(非中文，唯一)")
    private String username;

    @Schema(description = "是否启用")
    private Boolean enabled;

    @Schema(description = "账户是否锁定")
    private Boolean accountNonLocked;

    @Schema(description = "账户是否启用")
    private Boolean accountNonExpired;

    @Schema(description = "凭证是否过期")
    private Boolean credentialsNonExpired;

    @Schema(description = "用户昵称")
    private String nickName;

    @Schema(description = "用户头像图片的 URL。URL 最后一个数值代表正方形头像大小（有 0、46、64、96、132 数值可选，0 代表 640x640 的正方形头像，46 表示 46x46 的正方形头像，剩余数值以此类推。默认132），用户没有头像时该项为空。若用户更换头像，原有头像 URL 将失效。")
    private String avatarUrl;

    @Schema(description = "年龄")
    private Integer age;

    @Schema(description = "性别，0-未知，1-男、2-女")
    @Dict(type = "gender", dictEnum = GenderEnum.class)
    private String gender;

    @Schema(description = "用户所在国家")
    private String country;

    @Schema(description = "用户所在省份")
    private String province;

    @Schema(description = "用户所在城市")
    private String city;

    @Schema(description = "语种，en-英文，zh_CN-简体中文，zh_TW-繁体中文")
    private String language;

    @Schema(description = "住址")
    private String address;

    @Schema(description = "住址经度")
    private BigDecimal addressLongitude;

    @Schema(description = "住址纬度")
    private BigDecimal addressLatitude;

    @Sensitive(strategy = ID_CARD)
    @Schema(description = "身份证号码")
    private String identityCardNo;

    @Schema(description = "区号")
    private String countryCode;

    @Schema(description = "用户绑定的手机号（国外手机号会有区号）")
    private String phoneNumber;

    @Schema(description = "没有区号的手机号")
    private String purePhoneNumber;

    @Schema(description = "邮箱地址")
    private String emailAddress;
}
